﻿using System.Runtime;

namespace System.Reflection
{
    [NonScript]
    public abstract class MethodInfo : MethodBase
    {
        public override MemberTypes MemberType
        {
            get { return MemberTypes.Method; }
        }

        public virtual Type ReturnType
        {
            get { return null; }
        }

        public virtual ParameterInfo ReturnParameter
        {
            get { return null; }
        }

        public abstract ICustomAttributeProvider ReturnTypeCustomAttributes { get; }

        [TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")]
        protected MethodInfo()
        {
        }

        public static bool operator ==(MethodInfo left, MethodInfo right)
        {
            return false;
        }

        [TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
        public static bool operator !=(MethodInfo left, MethodInfo right)
        {
            return !(left == right);
        }

        public override bool Equals(object obj)
        {
            return base.Equals(obj);
        }

        public override int GetHashCode()
        {
            return base.GetHashCode();
        }

        public abstract MethodInfo GetBaseDefinition();

        public override Type[] GetGenericArguments()
        {
            return null;
        }

        public virtual MethodInfo GetGenericMethodDefinition()
        {
            return null;
        }

        public virtual MethodInfo MakeGenericMethod(params Type[] typeArguments)
        {
            return null;
        }

        public virtual Delegate CreateDelegate(Type delegateType)
        {
            return null;
        }

        public virtual Delegate CreateDelegate(Type delegateType, object target)
        {
            return null;
        }
    }
}
